#region Referencias
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Collections.Generic;
using System.Collections;
#endregion

/// <summary>
/// Summary description for DataInputStream
/// @author eespinoza
/// </summary>
namespace J2ME.RMS
{

    public abstract class GestorRMS
    {


        // Name of the store
        public String storeName;
        // Number of times the store has been opened.
        //private int storeOpened = 0;
        // Instance of the persistent store
        protected DataOutputStream data;
        // para sincronizar el acceso al RMS
        


        /**
         * Abstract method to create an empty record.
         * <P>
         * <b>Example: </b>
         * <pre>
         * <code>
         * public class MyStore extends GestorRMS
         * {
         *   ...
         *   protected OAbstractRecord createRecord()
         *   {
         *     return new MyRecord();
         *   }
         * </code>
         * </pre>
         * where MyRecord is the name of your record.
         * @return An empty OAbstractRecord.
         */
        abstract protected Persistente createObjectBean();

        /**
         * Es el metodo que se debe redefinir para guardar los datos de un objeto en el
         * Record Store
         * @param object el objeto que encapsula los datos a guardar
         * @throws Exception excepcion generada en el proceso de guardado
         */
        //protected void guardar(Persistente object1)
        //{
        //    byte[] arrByte = object1.persistir(null, null);

        //    data.write(arrByte);
        //}

        /**
         *
         * @param arrByte
         * @throws java.io.IOException
         * @throws javax.microedition.rms.RecordStoreFullException
         * @throws javax.microedition.rms.RecordStoreException
         */
        protected void guardar(byte[] arrByte)
        {
            data.write(arrByte);
        }

        /**
         * Es el metodo que se debe redefinir para guardar los datos de un objeto en el
         * Record Store
         * @param object el objeto que encapsula los datos a guardar
         * @throws Exception excepcion generada en el proceso de guardado
         */
        protected void guardar(List<Persistente> lista)
        {
           
            DataOutputStream dataTemp = new DataOutputStream();

            createObjectBean().persistir(dataTemp, lista);

            data.writeInt(dataTemp.arrInt.Count);
            
            data.write(dataTemp.getArray());

            dataTemp.clear();
            
            dataTemp = null;
        }

        protected void guardarServidorTemporal(List<Persistente> lista)
        {

            createObjectBean().persistir(data, lista);
        }
        //protected List<Persistente> getAllList(DataInputStream inputStream)
        //{
        //    List<Persistente> listBean = null;
        //    listBean = createObjectBean().recuperar(inputStream);
        //    return listBean;
        //}


        /**
         * ingresa el nombre del RecorStore
         */
        public GestorRMS(String name)
        {
            storeName = name;
        }


        /**
         *  abre el recordID
         * @throws javax.microedition.rms.RecordStoreException
         */
        protected void abrirRS()
        {
            data = new DataOutputStream();
        }//abrirRS

        /**
         * Cierra el data
         */
        protected void cerrarRS()
        {
            data.clear( );
        }

        /**
         * Obtiene
         * @return los registros o el registro en byte[]
         */
        public byte[] getDataByte()
        {
            return data.getArray();
        }



    }
}
